package org.jeecg.access.platform.entity.publish;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Id;
import java.io.Serializable;

/**
 * @description: 媒体资源实体类
 * 映射数据库表：platform_media
 * 功能：存储平台发布所需的图片、视频等媒体资源的元数据，支持多内容复用
 * @author: taogang
 * @date: 2025/8/11 10:45
 */
@Data
@TableName("platform_media")
public class Media implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 媒体资源ID
     * 数据库主键，唯一标识一条媒体资源
     * 生成规则：建议使用UUID或雪花算法，确保分布式环境下唯一
     * 示例："media_9876543210abcdef"
     */
    @Id
    private String id;

    /**
     * 媒体名称
     * 媒体资源的描述性名称（如"首页轮播图"、"产品介绍视频"）
     * 用途：便于管理后台识别媒体内容，不直接影响发布到外部平台的展示
     * 示例："2024新品宣传图"
     */
    @Column(name = "name")
    private String name;

    /**
     * 媒体描述
     * 对媒体资源的详细说明
     * 用途：补充媒体名称的信息，便于内容管理和检索
     * 示例："2024年夏季新品系列主视觉图，用于官网和电商平台"
     */
    @Column(name = "description")
    private String description;

    /**
     * 媒体类型
     * 标识媒体的格式类型，用于发布时的平台兼容性校验
     * 详细取值见MediaType枚举类
     * 用途：区分处理逻辑（如视频需要校验时长，图片需要校验尺寸）
     * 示例："IMAGE"
     */
    @Column(name = "type")
    private String type;

    /**
     * 媒体子类型
     * 更细分的媒体类型分类
     * 用途：针对不同子类型应用不同的处理规则（如IMAGE类型下的JPG、PNG等）
     * 示例："JPG"、"MP4"
     */
    @Column(name = "sub_type")
    private String subType;

    /**
     * 媒体资源URL
     * 本系统存储的媒体资源访问地址（如对象存储URL、服务器本地路径）
     * 用途：
     * 1. 前端预览媒体内容
     * 2. 发布时作为原始资源，根据平台要求转换为media_id或直接使用URL
     * 示例："https://storage.example.com/images/product_2024.jpg"
     */
    @Column(name = "url")
    private String url;

    /**
     * 原始文件名
     * 上传时的文件名称，包含扩展名
     * 用途：记录原始信息，便于追溯和管理
     * 示例："product_2024_main.jpg"
     */
    @Column(name = "file_name")
    private String fileName;

    /**
     * 文件大小（字节）
     * 媒体资源的大小，单位为字节（1MB = 1024*1024字节）
     * 用途：发布前校验是否符合平台限制（如微信公众号图片最大5MB）
     * 示例：2097152（表示2MB）
     */
    @Column(name = "file_size")
    private Long fileSize;

    /**
     * 宽度（像素）
     * 图片/视频的宽度尺寸，单位为像素
     * 用途：
     * 1. 图片：校验是否符合平台尺寸要求（如小红书封面图建议1:1）
     * 2. 视频：辅助判断清晰度（如1920px宽为高清视频）
     * 示例：1200（表示1200像素宽）
     */
    @Column(name = "width")
    private Integer width;

    /**
     * 高度（像素）
     * 图片/视频的高度尺寸，单位为像素
     * 用途：同width，结合宽高可计算比例（如16:9、1:1）
     * 示例：675（与width=1200搭配，比例约16:9）
     */
    @Column(name = "height")
    private Integer height;

    /**
     * 时长（秒）
     * 仅视频类型媒体有效，标识视频的播放时长
     * 用途：发布前校验是否符合平台限制（如抖音短视频最长60秒）
     * 示例：30（表示30秒）
     */
    @Column(name = "duration")
    private Integer duration;

    /**
     * 创建人ID
     * 记录媒体资源的上传者，关联用户表的用户ID
     * 用途：权限控制（如仅创建者可删除）和操作追溯
     * 示例："user_1001"
     */
    @Column(name = "creator")
    private String creator;

    /**
     * 创建时间
     * 媒体资源的上传时间，格式：yyyyMMddHHmmss（字符串类型）
     * 用途：
     * 1. 媒体资源的生命周期管理（如清理过期未使用的资源）
     * 2. 排序展示（如按上传时间倒序）
     * 示例："20241001091530"（表示2024-10-01 09:15:30）
     */
    @Column(name = "create_time")
    private String createTime;

    /**
     * 内部状态（逻辑删除标识）
     * 仅用于系统内部管理，标识媒体资源的可用状态：
     * - 0：正常（可用状态，可被内容关联和发布）
     * - 1：逻辑删除（不可用状态，不展示给用户，不参与新的发布）
     * 其它数值见DataState
     * 设计目的：避免物理删除导致历史发布记录关联失效，通过状态控制可见性
     */
    @Column(name = "state")
    private Integer state;
}

